import { IPSDEUtil } from '../dataentity/util/ipsdeutil';
import { IPSSysDataSyncAgent } from './ipssys-data-sync-agent';
import { IPSSubSysServiceAPI } from '../service/ipssub-sys-service-api';
import { IPSSysModelGroup } from '../system/ipssys-model-group';
import { IPSSystemModule } from '../system/ipssystem-module';

/**
 *
 * 子接口类型识别属性[]
 * @export
 * @interface IPSSysUtil
 */
export interface IPSSysUtil extends IPSDEUtil {
  /**
   * 认证token路径
   * @type {string}
   */
  authAccessTokenUrl: string;

  /**
   * 认证客户端标识
   * @type {string}
   */
  authClientId: string;

  /**
   * 认证客户端密码
   * @type {string}
   */
  authClientSecret: string;

  /**
   * 认证模式
   * @description 值模式 [系统服务接口认证模式] {NONE：无认证、 AUTHORIZATION_CODE：授权码模式、 PASSWORD：密码模式、 CLIENT_CREDENTIALS：客户端模式、 IMPLICIT：简化模式、 USER：用户自定义、 USER2：用户自定义2 }
   * @type {( string | 'NONE' | 'AUTHORIZATION_CODE' | 'PASSWORD' | 'CLIENT_CREDENTIALS' | 'IMPLICIT' | 'USER' | 'USER2')}
   */
  authMode: string | 'NONE' | 'AUTHORIZATION_CODE' | 'PASSWORD' | 'CLIENT_CREDENTIALS' | 'IMPLICIT' | 'USER' | 'USER2';

  /**
   * 认证参数
   * @type {string}
   */
  authParam: string;

  /**
   * 认证参数2
   * @type {string}
   */
  authParam2: string;

  /**
   * 代码标识
   * @type {string}
   */
  codeName: string;

  /**
   * 输入系统数据同步代理对象
   *
   * @type {IPSSysDataSyncAgent}
   */
  getInPSSysDataSyncAgent(): IPSSysDataSyncAgent | null;

  /**
   * 输入系统数据同步代理对象
   *
   * @type {IPSSysDataSyncAgent}
   */
  get inPSSysDataSyncAgent(): IPSSysDataSyncAgent | null;

  /**
   * 输入系统数据同步代理对象（必须存在）
   *
   * @type {IPSSysDataSyncAgent}
   */
  getInPSSysDataSyncAgentMust(): IPSSysDataSyncAgent;

  /**
   * 排序值
   * @type {number}
   * @default 99999
   */
  orderValue: number;

  /**
   * 输出系统数据同步代理对象
   *
   * @type {IPSSysDataSyncAgent}
   */
  getOutPSSysDataSyncAgent(): IPSSysDataSyncAgent | null;

  /**
   * 输出系统数据同步代理对象
   *
   * @type {IPSSysDataSyncAgent}
   */
  get outPSSysDataSyncAgent(): IPSSysDataSyncAgent | null;

  /**
   * 输出系统数据同步代理对象（必须存在）
   *
   * @type {IPSSysDataSyncAgent}
   */
  getOutPSSysDataSyncAgentMust(): IPSSysDataSyncAgent;

  /**
   * 外部服务接口
   *
   * @type {IPSSubSysServiceAPI}
   */
  getPSSubSysServiceAPI(): IPSSubSysServiceAPI | null;

  /**
   * 外部服务接口
   *
   * @type {IPSSubSysServiceAPI}
   */
  get psSubSysServiceAPI(): IPSSubSysServiceAPI | null;

  /**
   * 外部服务接口（必须存在）
   *
   * @type {IPSSubSysServiceAPI}
   */
  getPSSubSysServiceAPIMust(): IPSSubSysServiceAPI;

  /**
   * 系统模型组
   *
   * @type {IPSSysModelGroup}
   */
  getPSSysModelGroup(): IPSSysModelGroup | null;

  /**
   * 系统模型组
   *
   * @type {IPSSysModelGroup}
   */
  get psSysModelGroup(): IPSSysModelGroup | null;

  /**
   * 系统模型组（必须存在）
   *
   * @type {IPSSysModelGroup}
   */
  getPSSysModelGroupMust(): IPSSysModelGroup;

  /**
   * 系统模块
   *
   * @type {IPSSystemModule}
   */
  getPSSystemModule(): IPSSystemModule | null;

  /**
   * 系统模块
   *
   * @type {IPSSystemModule}
   */
  get psSystemModule(): IPSSystemModule | null;

  /**
   * 系统模块（必须存在）
   *
   * @type {IPSSystemModule}
   */
  getPSSystemModuleMust(): IPSSystemModule;

  /**
   * 运行时对象名称
   * @type {string}
   */
  rTObjectName: string;

  /**
   * 服务参数
   * @type {string}
   */
  serviceParam: string;

  /**
   * 服务参数2
   * @type {string}
   */
  serviceParam2: string;

  /**
   * 服务路径
   * @type {string}
   */
  servicePath: string;

  /**
   * 功能实体10名称
   * @type {string}
   */
  utilPSDE10Name: string;

  /**
   * 功能实体2名称
   * @type {string}
   */
  utilPSDE2Name: string;

  /**
   * 功能实体3名称
   * @type {string}
   */
  utilPSDE3Name: string;

  /**
   * 功能实体4名称
   * @type {string}
   */
  utilPSDE4Name: string;

  /**
   * 功能实体5名称
   * @type {string}
   */
  utilPSDE5Name: string;

  /**
   * 功能实体6名称
   * @type {string}
   */
  utilPSDE6Name: string;

  /**
   * 功能实体7名称
   * @type {string}
   */
  utilPSDE7Name: string;

  /**
   * 功能实体8名称
   * @type {string}
   */
  utilPSDE8Name: string;

  /**
   * 功能实体9名称
   * @type {string}
   */
  utilPSDE9Name: string;

  /**
   * 功能实体名称
   * @type {string}
   */
  utilPSDEName: string;

  /**
   * 功能类型
   * @description 值模式 [实体功能配置类型（系统全局）] {DATAAUDIT：数据审计、 FILE：附件存储、 APPCUSTOMIZE：应用自定义、 SAASADMIN：SaaS应用管理、 SAASUSERAUTH：SaaS用户授权（内置）、 SAASUSERAUTHSERVICE：SaaS用户授权服务（对外）、 SAASORG：SaaS组织功能（内置）、 SAASORGSERVICE：SaaS组织服务（对外）、 SAASWF：SaaS流程引擎功能（内置）、 SAASWFSERVICE：SaaS流程引擎服务（对外）、 SAASCORESERVICE：SaaS核心服务（对外）、 LOGLISTENER：日志侦听、 USER：用户自定义 }
   * @type {( string | 'DATAAUDIT' | 'FILE' | 'APPCUSTOMIZE' | 'SAASADMIN' | 'SAASUSERAUTH' | 'SAASUSERAUTHSERVICE' | 'SAASORG' | 'SAASORGSERVICE' | 'SAASWF' | 'SAASWFSERVICE' | 'SAASCORESERVICE' | 'LOGLISTENER' | 'USER')}
   */
  utilType:
    | string
    | 'DATAAUDIT'
    | 'FILE'
    | 'APPCUSTOMIZE'
    | 'SAASADMIN'
    | 'SAASUSERAUTH'
    | 'SAASUSERAUTHSERVICE'
    | 'SAASORG'
    | 'SAASORGSERVICE'
    | 'SAASWF'
    | 'SAASWFSERVICE'
    | 'SAASCORESERVICE'
    | 'LOGLISTENER'
    | 'USER';

  /**
   * 注册到系统
   * @type {boolean}
   */
  regToSys: boolean;

  /**
   * 尝试模式
   * @type {boolean}
   * @default false
   */
  tryMode: boolean;
}
